// 封装函数技巧：
// 三要素：函数功能，参数，返回值
// 功能：函数名起名时，尽量要体现出函数的功能，是动词
// 参数：已知条件，也可以这么想：重复代码中的不同之处就是参数（变量）
// 返回值：结果。


// 功能：保存cookie
// 参数：
//   键：key
//   值：value
//   保存时长：dayCount 单位（天）
//   可以访问的路径:path
//   可以访问的域名：domain

// 返回值：无

function saveCookie(key, value, dayCount, path, domain) {
    let d = new Date();
    d.setDate(d.getDate() + dayCount);
    // escape:编码，把中文字符编成百分号编码。
    let str = `${key}=${escape(value)};expires=${d.toGMTString()}`;
    if (path) {
        str += `;path=${path}`;
    }
    if (domain) {
        str += `;domain=${domain}`;
    }
    document.cookie = str;
}

//功能： 获取cookie
// 参数：
//    键：key
//返回值：键对应的值，如果没有，返回null。

function getCookie(key) {

    let str = unescape(document.cookie);

    let arr = str.split("; ");

    for (let i = 0; i < arr.length; i++) {
        let newArr = arr[i].split("=");
        if (newArr[0] == key) {
            return newArr[1];
        }
    }
    return null;
}


// 删除cookie
// 不能直接删除cookie，但是可以设置失效时间为过去，就可以完成删除
// 参数：
//   键

// 返回值：无  

function removeCookie(key) {
    saveCookie(key, " ", -1);
}

// 修改cookie
//   cookie中是用键来标识唯一性的（其实，所有键值对都是用键来标识唯一性），所以，修改cookie，就调用saveCookie。